/*
 * InconsistenciasDelegate.java
 *
 * Created on June 13, 2007, 10:02 AM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */

package com.src.computec.inconsistencias.delegate;

import com.src.computec.inconsistencias.dto.ReenvioCto;
import com.src.computec.inconsistencias.exception.InconsistenciasException;
import com.src.computec.inconsistencias.helper.InconsistenciasHelper;
import com.src.computec.radar.base.delegate.BaseDelegate;
import com.src.computec.radar.services.utilities.dto.EnvioDto;
import com.src.computec.radar.services.utilities.dto.ProveedorDto;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

/**
 *
 * @author fsanchez
 */
public class InconsistenciasDelegate extends BaseDelegate{
    
    private InconsistenciasHelper inconsistenciasHelper;
    
    /** Creates a new instance of InconsistenciasDelegate */
    public InconsistenciasDelegate() {
	inconsistenciasHelper=new InconsistenciasHelper();
    }
    
    public EnvioDto getEnvio(String pCodigoBarras) throws InconsistenciasException{
	return inconsistenciasHelper.getEnvio(pCodigoBarras);	
    }
    
    public HashMap getEnviosAnterior(List pLista) throws InconsistenciasException{
	return inconsistenciasHelper.getEnviosAnterior(pLista);	
    }
    public List getEnviosActual(List pLista) throws InconsistenciasException{
	return inconsistenciasHelper.getEnviosActual(pLista);	
    }   
    
    public HashMap getAllNODO_EM() throws InconsistenciasException{
	return inconsistenciasHelper.getAllNODO_EM();
    }
    
    public void insertMensajeAlerta(String fileName, String ldapUser,String pDescripcion,String pOrigen) throws InconsistenciasException{
	inconsistenciasHelper.insertMensajeAlerta(fileName, ldapUser, pDescripcion, pOrigen);
    }
    
    public void insertLogInconsistencias(String pLdapUser,String pCantidadEnvios,String pCantidadInc,List pListCodBarras,String pCodProveedor) throws InconsistenciasException{
	inconsistenciasHelper.insertLogInconsistencias(pLdapUser, pCantidadEnvios, pCantidadInc, pListCodBarras, pCodProveedor);
    }
    
    public ProveedorDto getRazonSocialProveedor(ProveedorDto pDto) throws InconsistenciasException{
	return inconsistenciasHelper.getRazonSocialProveedor(pDto);
    }
    
    public List getOrdenesProceso(ArrayList param) throws InconsistenciasException{
	return inconsistenciasHelper.getOrdenesProceso(param);
    }
    
    public ArrayList getReenvioInfo(List pOrdenes,String pCodProveedor,String pCodNodo,String pEstado) throws InconsistenciasException{
	ArrayList listTotalEnvios=inconsistenciasHelper.getReenvioTotalInfo(pOrdenes, pCodProveedor, pCodNodo);
	ArrayList listPendEnvios=inconsistenciasHelper.getReenvioPendInfo(pOrdenes, pCodProveedor,pCodNodo,pEstado);
	
	ArrayList listResult=new ArrayList();
	
	
	
	
	boolean encontro=false;
	Iterator itTotal=listTotalEnvios.iterator();
	int totalPend_=0;
	int totalEnvios_=0;

	while (itTotal.hasNext()) {
	    ReenvioCto reenvioTotal = (ReenvioCto) itTotal.next();    
	    int inx_=listPendEnvios.indexOf(reenvioTotal);
	    
	    if(inx_>=0){
		ReenvioCto reenvioResult=new ReenvioCto(reenvioTotal);
		
		ReenvioCto reenvioPend = (ReenvioCto)listPendEnvios.get(inx_);		
		reenvioResult.setCantidadEnviosPend(reenvioPend.getCantidadEnviosPend());
		totalEnvios_=totalEnvios_+Integer.parseInt(reenvioResult.getCantidadEnviosTotal());
		totalPend_=totalPend_+Integer.parseInt(reenvioPend.getCantidadEnviosPend());		
		listResult.add(reenvioResult);
	    }
	    
	    
	}
	ReenvioCto reenvioTotales_=new ReenvioCto();
	reenvioTotales_.setFechaProcesoFormat("TOTAL");
	reenvioTotales_.setCantidadEnviosTotal(String.valueOf(totalEnvios_));
	reenvioTotales_.setCantidadEnviosPend(String.valueOf(totalPend_));	
	listResult.add(reenvioTotales_);
	return listResult;
    }
    
    
    public ArrayList getReenvioInformacion(List pOrdenes,String pCodProveedor,String pCodNodo,String pEstado,String pEstadoPendiente,String pGestionEntrega,String pGestionInconsistente) throws InconsistenciasException{
	ArrayList listTotalEnvios=inconsistenciasHelper.getReenvioTotales(pOrdenes, pCodProveedor, pCodNodo);
	ArrayList listPendEnvios=inconsistenciasHelper.getReenvioPendendientes(pOrdenes, pCodProveedor,pCodNodo,pEstadoPendiente);
	ArrayList listEfectivos=inconsistenciasHelper.getReenvioSegunGestion(pOrdenes, pCodProveedor,pCodNodo,pEstado, pGestionEntrega);
	ArrayList listNoEfectivos=inconsistenciasHelper.getReenvioSegunGestion(pOrdenes, pCodProveedor,pCodNodo,pEstado, pGestionInconsistente);
	
	ArrayList listResult=new ArrayList();
	
	
	
	boolean encontro=false;
	Iterator itTotal=listTotalEnvios.iterator();
	int totalPend_=0;
	int totalEnvios_=0;
	int totalEfectivos_=0;
	int totalNoEfectivos_=0;

	DecimalFormat percent = new DecimalFormat("0.00 %"); 
	DecimalFormat percent100 = new DecimalFormat("0 %");
	while (itTotal.hasNext()) {
	    ReenvioCto reenvioTotal = (ReenvioCto) itTotal.next();    
	    int inPend_=listPendEnvios.indexOf(reenvioTotal);
	    int inEfec_=listEfectivos.indexOf(reenvioTotal);
	    int inNoEfec_=listNoEfectivos.indexOf(reenvioTotal);
	    	
		  
	    ReenvioCto reenvioResult=new ReenvioCto(reenvioTotal);

	    //Reenvios Pendientes
	    if(inPend_>=0){
		ReenvioCto reenvioPend = (ReenvioCto)listPendEnvios.get(inPend_);		
		
		reenvioResult.setCantidadEnviosPend(reenvioPend.getCantidadEnviosPend());
		try{
		    double porcentaje=(Double.parseDouble(reenvioPend.getCantidadEnviosPend())/Double.parseDouble(reenvioResult.getCantidadEnviosTotal()));
		    String porcentajeStr=String.valueOf(porcentaje);
		    if(porcentaje<1 && porcentaje>0 ){
			porcentajeStr=percent.format(porcentaje);
		    }else{
			porcentajeStr=percent100.format(porcentaje);
		    }
		    reenvioResult.setPorcentajeEnviosPend(porcentajeStr);
		}catch(ArithmeticException ar){
		    reenvioResult.setPorcentajeEnviosPend("0 %");
		}
		totalPend_=totalPend_+Integer.parseInt(reenvioPend.getCantidadEnviosPend());		
	    }else{
		reenvioResult.setCantidadEnviosPend("0");		
		reenvioResult.setPorcentajeEnviosPend("0 %");
	    }
	    
	    //Reenvios Efectivos
	    if(inEfec_>=0){
		ReenvioCto reenvioEfec = (ReenvioCto)listEfectivos.get(inEfec_);	
		
		reenvioResult.setCantidadEnviosEfec(reenvioEfec.getCantidadEnviosPend());		
		try{
		    double porcentaje=(Double.parseDouble(reenvioEfec.getCantidadEnviosPend())/Double.parseDouble(reenvioResult.getCantidadEnviosTotal()));
		    String porcentajeStr=String.valueOf(porcentaje);
		    if(porcentaje<1 && porcentaje>0 ){
			porcentajeStr=percent.format(porcentaje);
		    }else{
			porcentajeStr=percent100.format(porcentaje);
		    }
		    reenvioResult.setPorcentajeEnviosEfec(porcentajeStr);
		}catch(ArithmeticException ar){
		    reenvioResult.setPorcentajeEnviosEfec("0 %");
		}
		totalEfectivos_=totalEfectivos_+Integer.parseInt(reenvioEfec.getCantidadEnviosPend());		
	    }else{
		reenvioResult.setCantidadEnviosEfec("0");
		reenvioResult.setPorcentajeEnviosEfec("0 %");
	    }
	    
	    //Reenvios NoEfectivos
	    if(inNoEfec_>=0){
		ReenvioCto reenvioNoEfec = (ReenvioCto)listNoEfectivos.get(inNoEfec_);		
		reenvioResult.setCantidadEnviosNoEfec(reenvioNoEfec.getCantidadEnviosPend());	
		
		try{
		    double porcentaje=(Double.parseDouble(reenvioNoEfec.getCantidadEnviosPend())/Double.parseDouble(reenvioResult.getCantidadEnviosTotal()));
		    String porcentajeStr=String.valueOf(porcentaje);
		     if(porcentaje<1 && porcentaje>0 ){
			porcentajeStr=percent.format(porcentaje);
		    }else{
			porcentajeStr=percent100.format(porcentaje);
		    }
		    reenvioResult.setPorcentajeEnviosNoEfec(porcentajeStr);
		}catch(ArithmeticException ar){
		    reenvioResult.setPorcentajeEnviosNoEfec("0 %");
		}
		totalNoEfectivos_=totalNoEfectivos_+Integer.parseInt(reenvioNoEfec.getCantidadEnviosPend());		
	    }else{
		reenvioResult.setCantidadEnviosNoEfec("0");		
		reenvioResult.setPorcentajeEnviosNoEfec("0 %");
	    }
	    
	    totalEnvios_=totalEnvios_+Integer.parseInt(reenvioResult.getCantidadEnviosTotal());
	    
	    listResult.add(reenvioResult);
	}
	
	
	ReenvioCto reenvioTotales_=new ReenvioCto();
	reenvioTotales_.setFechaProcesoFormat("TOTAL");
	reenvioTotales_.setCantidadEnviosTotal(String.valueOf(totalEnvios_));
		    	
	try{
	    double porcentajePend=(new Double(totalPend_).doubleValue()/new Double(totalEnvios_).doubleValue());
	
	    String porcentajeStr=String.valueOf(porcentajePend);
	    if(porcentajePend<1 && porcentajePend>0 ){
	        porcentajeStr=percent.format(porcentajePend);
	    }else{
	        porcentajeStr=percent100.format(porcentajePend);
	    }
	    reenvioTotales_.setPorcentajeEnviosPend(porcentajeStr);
	}catch(ArithmeticException ar){
	    reenvioTotales_.setPorcentajeEnviosPend("0 %");	
	}
	reenvioTotales_.setCantidadEnviosPend(String.valueOf(totalPend_));
	
	try{
	    double porcentajeEfec=(new Double(totalEfectivos_).doubleValue()/new Double(totalEnvios_).doubleValue());
	    String porcentajeStr=String.valueOf(porcentajeEfec);
	    if(porcentajeEfec<1 && porcentajeEfec>0 ){
	        porcentajeStr=percent.format(porcentajeEfec);
	    }else{
	        porcentajeStr=percent100.format(porcentajeEfec);
	    }
	    reenvioTotales_.setPorcentajeEnviosEfec(porcentajeStr);	
	}catch(ArithmeticException ar){
	        reenvioTotales_.setPorcentajeEnviosEfec("0 %");	
	}
	reenvioTotales_.setCantidadEnviosEfec(String.valueOf(totalEfectivos_));
	
	try{
	    double porcentajeNoEfec=(new Double(totalNoEfectivos_).doubleValue()/new Double(totalEnvios_).doubleValue());
	    String porcentajeStr=String.valueOf(porcentajeNoEfec);
	    if(porcentajeNoEfec<1 && porcentajeNoEfec>0 ){
	        porcentajeStr=percent.format(porcentajeNoEfec);
	    }else{
	        porcentajeStr=percent100.format(porcentajeNoEfec);
	    }
	    reenvioTotales_.setPorcentajeEnviosNoEfec(porcentajeStr);	
	}catch(ArithmeticException ar){
	    reenvioTotales_.setPorcentajeEnviosNoEfec("0 %");	
	}
	reenvioTotales_.setCantidadEnviosNoEfec(String.valueOf(totalNoEfectivos_));
	 System.out.println("reenvioTotales_:"+reenvioTotales_.getCantidadEnviosTotal());
	listResult.add(reenvioTotales_);
	return listResult;
    }
    
    public ArrayList getReenvioDetalleTotales(List pOrdenes,String pCodProveedor,String pCodNodo) throws InconsistenciasException {
	return inconsistenciasHelper.getReenvioDetalleTotales(pOrdenes, pCodProveedor,pCodNodo);
    }
    
    public ArrayList getReenvioDetallePendientes(List pOrdenes,String pCodProveedor,String pCodNodo,String pEstado) throws InconsistenciasException {
	return inconsistenciasHelper.getReenvioDetallePendientes(pOrdenes, pCodProveedor,pCodNodo,pEstado);
    }
    
     public ArrayList getReenvioDetalleSegunGestion(List pOrdenes,String pCodProveedor,String pCodNodo, String pEstado,String pCodigosEntrega) throws InconsistenciasException {
	 return inconsistenciasHelper.getReenvioDetalleSegunGestion(pOrdenes, pCodProveedor,pCodNodo,pEstado,pCodigosEntrega);
     }
}
